MinCaml AArch64対応の記録
#MinCaml #AArch64
1月18日
AArch64アセンブリの練習
https://twitter.com/htkymtks/status/1615693016764940288
AArch64(64ビットARM)のアセンブリプログラムを書いたことが無いので練習を開始。4649(ヨロシク)を返すだけのプログラムを書くなどした。
1月24日
AArch64のスタックに苦戦中
https://twitter.com/htkymtks/status/1617843066957877249
https://twitter.com/htkymtks/status/1617874265931681799
AArch64でスタックを操作しようとするもエラーが出まくるので、以下を参考にAArch64のスタック操作の基本を練習した。
Using the Stack in AArch32 and AArch64
Using the Stack in AArch64: Implementing Push and Pop
1月25日
AArch64アセンブリでフィボナッチ
https://twitter.com/htkymtks/status/1618193308110688258
AArch64アセンブリの基本が分かってきたので、フィボナッチ数を計算するプログラムをAArch64アセンブリで書いてみるなど。
2月1日
MinCamlでハローワールド
https://twitter.com/htkymtks/status/1620696680881594369
https://twitter.com/htkymtks/status/1620697763641184258
MinCamlのAArch64への移植を開始。まずは以下のような整数をプリントするだけのMinCamlのコードをAArch64アセンブリとして出力できるようにした。
MinCamlのコード
code:helloworld.ml
let x = 860 in print_int x; print_newline ()
出力されたアセンブリコード
code:helloworld.s
.text
.globl _min_caml_start
.align 2
_min_caml_start: # main entry point
add x28, x0, 0
add x27, x1, 0
str fp, x28, 0
str lr, x28, 8
add x28, x28, 16
# main program starts
mov x0, 860
mov x26, lr
str x26, x28, 0
add x28, x28, 8
bl _min_caml_print_int
sub x28, x28, 8
ldr x26, x28, 0
mov lr, x26
mov x26, lr
str x26, x28, 0
add x28, x28, 8
bl _min_caml_print_newline
sub x28, x28, 8
ldr x26, x28, 0
mov lr, x26
# main program ends
sub x28, x28, 16
ldr fp, x28, 0
str lr, x28, 8
ret
2月4日
MinCamlの中間コード出力
https://twitter.com/htkymtks/status/1621718912026148864
MinCamlコンパイラでは、MinCamlのコードからアセンブリコードを出力するまでの間にいくつかの中間コードへの変換が行われる。
MinCamlのコードがどのような中間コードに変換されているかを確認するため、中間コードを出力できるようにした。
2月7日
MinCamlの内と外とのスタック管理の違いに気付く
https://twitter.com/htkymtks/status/1622958890588700672
MinCamlのスタックはメモリの下位アドレス(0x00000000)から上位アドレス(0xffffffff)へ向かって伸びることが判明。上位アドレス(0xffffffff)から下位アドレス(0x00000000)へと伸びるC言語の世界のスタックをMinCamlへ渡すとスタック内のデータが破壊されてしまうため、MinCaml用のスタック領域を別途用意するようにした。
2月9日
MinCamlでフィボナッチが動いた
https://twitter.com/htkymtks/status/1623649985849073665
「関数呼び出し」や「if による条件分岐」を実装して、ついにMinCamlでフィボナッチが動くようになったよ〜
2月11日
クロージャが動かなくて泣いてる
https://twitter.com/htkymtks/status/1624245951702667264
https://twitter.com/htkymtks/status/1624252638333386752
https://twitter.com/htkymtks/status/1624254032322908160
https://twitter.com/htkymtks/status/1624254344676929538
(長い...)
「MinCaml移植の難所」と呼ばれているクロージャの実装を開始。休日を丸一日費やして無事にクロージャが動くようになりました。
2月13日
MinCamlでマンデルブロが動いた
https://twitter.com/htkymtks/status/1625116272911605760
MinCamlでマンデルブロが動くようになったぞー
浮動小数点数のレジスタへのロードに悩む
https://twitter.com/htkymtks/status/1624789496993832960
浮動小数点数のレジスタへのロード方法がわからず苦戦するも、C言語で書いた浮動小数点数を扱うコードを逆アセンブルすることで無事に切り抜けた。
2月15日
intとfloatの配列が動いた
https://twitter.com/htkymtks/status/1625850043013173251
Xcode便利〜
https://twitter.com/htkymtks/status/1625857906813046786
三角関数が欲しいか?
https://twitter.com/htkymtks/status/1625860582594457600
2月16日
末尾呼び出しのクロージャが動かなかった件
https://twitter.com/htkymtks/status/1626209651275726850
2月17日
MinCamlのtest/*.mlが通った
https://twitter.com/htkymtks/status/1626587306919608321
2月18日
できたてホヤホヤのMinCamlで雑にビルドしたレイトレーサのプロセスが、ゴミファイルを残して消えていった...
https://twitter.com/htkymtks/status/1626601946445672448
2月19日
闇夜のカラスかな?
https://twitter.com/htkymtks/status/1627151010371375106
レイトレが動いた
https://twitter.com/htkymtks/status/1627285582408998912